
# 工具包：

# 生成jwt-token：
import time

import jwt
import datetime

from jwt import ExpiredSignatureError
from flask import jsonify

class JwT():

    def __init__(self):
        self.secret = '123456'

    # 加密token，并设置有效期：
    def encode_time(self,userinfo,filetime = 300):

        # sexp = datetime.datetime.now() + datetime.timedelta(seconds=filetime)
        # sexpl = (datetime.datetime.now() + datetime.timedelta(seconds=filetime)).timestamp()
        # sexpz = time.time() + 2*60*60
        # print(sexp)
        # print(sexpl)
        # print(sexpz)

    #     生成payload：
        payload = {
            'exp':(datetime.datetime.now() + datetime.timedelta(seconds=filetime)).timestamp(),
            'data':userinfo
        }
        resp = jwt.encode(payload,self.secret,algorithm='HS256')
        return resp

    # 加密token
    def encode(self,userinfo):
        resp = jwt.encode(userinfo,self.secret,algorithm='HS256')
        print('我是加密的数据>>>>>>>>>>>>>>>>>>>',resp)

        return resp
#     解密token：
    def decode(self,str_jwt):
        try:
            resp = jwt.decode(str_jwt,self.secret,algorithms=['HS256'])
            print('我是解密后的数据>>>>>>>>>>>>>>>>>',resp)
            return resp
        except ExpiredSignatureError as e:
            print(e)
            if e == 'Signature has expired':
                return jsonify({'msg':'token已过期！','code':400})


# if __name__ == '__main__':
#     mj = JwT()
#     # str_jwt = mj.encode_time({"123":"123"},20)
#     # print(str_jwt)
#     mj.decode('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NjY2MTcxMjQuNDg2MjIsImRhdGEiOnsiMTIzIjoiMTIzIn19.UR-_jFMFzkGJjiMgHIsj2nUFaJZ3F_Mk5VMBxjkVMLg')



















import re
# 密码验证：
def re_password(pwd):

    pwdl = re.findall(r'^[1-9][0-9]{6,15}$',pwd)
    return pwdl




# 正则邮箱名：
def re_email(email):
#     生成正则对象：
    re_em = re.compile(r'^[1-9a-z][0-9a-z]{4,10}@qq\.com')
    zheng = re_em.match(email)

    return zheng




# 定义md5加密：
from hashlib import md5
from config import *
def Md_mi(pwd):
    pwd += key
    m = md5()
    m.update(pwd.encode())
    _pwd = m.hexdigest()
    return _pwd



import requests
import base64
import urllib

# 使用Ai自动识别文字：
class Ai():
    def __init__(self):
        self.key = "1DACwwjrFSFLYHszdvt809cr"
        self.secret_key = 'eiG11GyEGhtcTrvR8ByrOYc4aA5T3eh6'

    def get_token(self):
#             获取token：
        resp = requests.get('https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}'.format(
            self.key,self.secret_key
        ))
#         返回数据：
        print(resp.json()['access_token'])

        return resp.json()['access_token']

    def get_img(self,token):
#         拿着token进行识图：
        url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general?access_token={}'.format(token)

#         设置请求头：
        headers = {'Content-Type':'application/x-www-form-urlencoded'}


#         打开文件获取文件中的数据：
        img = open('./code.png','rb')
        filename = img.read()
        img.close()

#         构建参数
        data = {'image':base64.b64encode(filename)}
#         进行加密：
        data = urllib.parse.urlencode(data)

#         进行发送：
        resp = requests.post(url=url,data=data,headers=headers)

        respl = resp.json()['words_result']
        print(respl)

        # 获取具体的值：
        words = ""

        for i in respl:
            for key,value in i.items():
                if key == "words":
                    words += value
        print(words)
        return respl



# if __name__ == '__main__':
#     ai = Ai()
#     token = ai.get_token()
#     ai.get_img(token)








# 进行生成图片验证码：
# 导入所需要的库：
from PIL import Image,ImageDraw

# 导入
import io

class ImageCode():



#     使用静态方法来校验验证码：
    @staticmethod
    def static_img(email,code):

        codel = r.get(email + '_img')
        print(codel)

        if not codel:
            return False
        if codel.lower() != code.lower():
            return False
        else:
            return True




#     生成画布：
    size = (120,50)
#     使用类试图：
    @classmethod
    def send_img(cls):
#         生成图像的配置：
        image = Image.new('RGB',cls.size,'white')
#          生成画笔：
        draw = ImageDraw.Draw(image,'RGB')
#         定义要生成的内容:
        data_code  = "0123456789zxcvbnmasdfghjklqwertyuiop"
#         定义容器：
        str_code = ""
#         循环找到下标：
        for i in range(4):
#             随机到下标：
            num = random.randrange(len(data_code))
#             获取下标对应的值：
            randmo_str = data_code[num]
#           拿画笔进行绘制：
            draw.text((10+30*i,20),randmo_str,'red')
#             将值进行追加：
            str_code += randmo_str

#         返回数据：
        return image,str_code






from database import r
# 存入数据库：
def redis_db_code(email,code,time=300):

    codel = r.setex(email,time,code)

#     返回如果shitrue就成功存储了：
    return codel




# 生成随机验证码：
import random
def send_ran_code(abc=True,length = 4):

    if abc:
        code = "0123456789zxcvbnmasdfghjklqwertyuiop"
    else:
        code = "0123456789"

#     生成四位数的验证码：
    return ''.join([random.choice(code) for _ in range(length)])






# 发送验证码要使用的库：
#导入协议库：
import smtplib

# 导入封文本库：
from email.mime.text import MIMEText

# 导入分类库：
from email.mime.multipart import MIMEMultipart

# 发送邮箱验证码：
class SendEmail():
#     实例化邮箱：
    def __init__(self):
        self.user = '3277909872@qq.com'
        self.pwd = 'acbotxxiiivtcjha'

#     实现发送邮件体：
    def send_email(self,_touser,title,_content):
#         创建分类对象：
        msg = MIMEMultipart()
#         生成标题：
        msg['Subject'] = title
#       谁要发送的数据：
        msg['From'] = self.user
#       要给谁：
        msg['To'] = _touser
#       生成文件内容：
        user_data = MIMEText(_content,'html','utf-8')
#       添加到邮件体中：
        msg.attach(user_data)

#       发送逻辑：
#         1.先链接邮箱：
        s = smtplib.SMTP_SSL('smtp.qq.com',465)
#         进行登录邮箱：
        s.login(self.user,self.pwd)
#       发送逻辑，
        s.sendmail(self.user,_touser,msg.as_string())
#         关闭发送：
        s.close()


# if __name__ == '__main__':
#     send = SendEmail()
#     code = send_ran_code()
#     send.send_email('3277909872@qq.com','来自社交平台',code)



# # 随机成功数据：
# def random_num(abc=True,length = 4):
#
#     if abc:
#         code = "0123456789zxcvbnmasdfghjklqwertyuiop"
#     else:
#         code = "0123456789"
#
#     return ''.join([random.choice(code) for _ in range(length)])
#
#
#
#
# # 导入协议库：
# import smtplib
#
# # 导入文本库：
# from email.mime.text import MIMEText
#
# # 导入分类库：
# from email.mime.multipart import MIMEMultipart
#
#
# # 发送邮箱验证码：
# class SendEmailz():
#
#     def __init__(self):
#         self.user = "3277909872@qq.com"
#         self.pwd = 'acbotxxiiivtcjha'
#
#     def send_email(self,_touser,title,_content):
# #         邮箱体：
#         msg = MIMEMultipart()
# #        邮箱标题：
#         msg['Subject'] = title
# #       谁要发送：
#         msg['From'] = self.user
# #       要发给谁：
#         msg['To'] = _touser
# #         生成内容：
#         dat = MIMEText(_content,'html','utf-8')
# #         添加到邮件体中：
#         msg.attach(dat)
#
# #       发送优先验证码逻辑：
# #         链接邮箱：
#         s = smtplib.SMTP_SSL('smtp.qq.com',465)
# #         登录：
#         s.login(self.user,self.pwd)
# #       发送：
#         s.sendmail(self.user,_touser,msg.as_string())
# #       关闭：
#         s.close()
#
# if __name__ == '__main__':
#     send = SendEmailz()
#     code = random_num()
#     send.send_email('3277909872@qq.com','来自田世家',code)




# 图片验证码封装：
class TuPian():

    # 定义画布
    size = (120,50)
    @classmethod
    def sendimg(cls):
        #         定义画布：
        size = (120, 50)
        #         配置图片：
        image = Image.new('RGB', size, 'white')
        #         定义画笔：
        draw = ImageDraw.Draw(image, 'RGB')
        #         定义内容：
        data_value = "0123456789zxcvbnmasdfghjklqwertyuiop"

        #         定义一个容器：
        str_rong = ''
        for i in range(4):
            num = random.randrange(len(data_value))
            #             根据下标获取对应的值：
            random_str = data_value[num]
            #             绘制：
            draw.text((10 + 30 * i, 20), random_str, 'red')
            #             追加到容器中：
            str_rong += random_str

        return image,str_rong



# Ai识别：







